#include "StdAfx.h"
#include <atlbase.h>
#include <atlcom.h>
#include <propkeydef.h>
#include <UIRibbonPropertyHelpers.h>
#include "PropertyKeyItem.h"
#include <algorithm>

map<PROPERTYKEY, wstring> CPropertyKeyItem::s_propertyKeyMap;

#define PROPKEY_MAP_ENTRY(Key) s_propertyKeyMap[Key] = L#Key

void CPropertyKeyItem::InitPropertyKeyMap()
{
	if (!s_propertyKeyMap.empty())
		return;

	PROPKEY_MAP_ENTRY(UI_PKEY_Enabled);                      
	PROPKEY_MAP_ENTRY(UI_PKEY_LabelDescription);             
	PROPKEY_MAP_ENTRY(UI_PKEY_Keytip);                       
	PROPKEY_MAP_ENTRY(UI_PKEY_Label);                        
	PROPKEY_MAP_ENTRY(UI_PKEY_TooltipDescription);           
	PROPKEY_MAP_ENTRY(UI_PKEY_TooltipTitle);                 
	PROPKEY_MAP_ENTRY(UI_PKEY_LargeImage);                   
	PROPKEY_MAP_ENTRY(UI_PKEY_LargeHighContrastImage);       
	PROPKEY_MAP_ENTRY(UI_PKEY_SmallImage);                   
	PROPKEY_MAP_ENTRY(UI_PKEY_SmallHighContrastImage);       
	PROPKEY_MAP_ENTRY(UI_PKEY_CommandId);                    
	PROPKEY_MAP_ENTRY(UI_PKEY_ItemsSource);                  
	PROPKEY_MAP_ENTRY(UI_PKEY_Categories);                   
	PROPKEY_MAP_ENTRY(UI_PKEY_CategoryId);                   
	PROPKEY_MAP_ENTRY(UI_PKEY_SelectedItem);                 
	PROPKEY_MAP_ENTRY(UI_PKEY_CommandType);                  
	PROPKEY_MAP_ENTRY(UI_PKEY_ItemImage);                    
	PROPKEY_MAP_ENTRY(UI_PKEY_BooleanValue);                 
	PROPKEY_MAP_ENTRY(UI_PKEY_DecimalValue);                 
	PROPKEY_MAP_ENTRY(UI_PKEY_StringValue);                  
	PROPKEY_MAP_ENTRY(UI_PKEY_MaxValue);                     
	PROPKEY_MAP_ENTRY(UI_PKEY_MinValue);                     
	PROPKEY_MAP_ENTRY(UI_PKEY_Increment);                    
	PROPKEY_MAP_ENTRY(UI_PKEY_DecimalPlaces);                
	PROPKEY_MAP_ENTRY(UI_PKEY_FormatString);                 
	PROPKEY_MAP_ENTRY(UI_PKEY_RepresentativeString);         
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties);               
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_Family);        
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_Size);          
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_Bold);          
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_Italic);        
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_Underline);     
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_Strikethrough); 
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_VerticalPositioning); 
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_ForegroundColor);     
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_BackgroundColor);     
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_ForegroundColorType); 
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_BackgroundColorType); 
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_ChangedProperties);   
	PROPKEY_MAP_ENTRY(UI_PKEY_FontProperties_DeltaSize);           
	PROPKEY_MAP_ENTRY(UI_PKEY_RecentItems);                  
	PROPKEY_MAP_ENTRY(UI_PKEY_Pinned);                       
	PROPKEY_MAP_ENTRY(UI_PKEY_Color);                        
	PROPKEY_MAP_ENTRY(UI_PKEY_ColorType);                    
	PROPKEY_MAP_ENTRY(UI_PKEY_ColorMode);                    
	PROPKEY_MAP_ENTRY(UI_PKEY_ThemeColorsCategoryLabel);     
	PROPKEY_MAP_ENTRY(UI_PKEY_StandardColorsCategoryLabel);  
	PROPKEY_MAP_ENTRY(UI_PKEY_RecentColorsCategoryLabel);    
	PROPKEY_MAP_ENTRY(UI_PKEY_AutomaticColorLabel);          
	PROPKEY_MAP_ENTRY(UI_PKEY_NoColorLabel);                 
	PROPKEY_MAP_ENTRY(UI_PKEY_MoreColorsLabel);              
	PROPKEY_MAP_ENTRY(UI_PKEY_ThemeColors);                  
	PROPKEY_MAP_ENTRY(UI_PKEY_StandardColors);               
	PROPKEY_MAP_ENTRY(UI_PKEY_ThemeColorsTooltips);          
	PROPKEY_MAP_ENTRY(UI_PKEY_StandardColorsTooltips);       
	PROPKEY_MAP_ENTRY(UI_PKEY_Viewable);                     
	PROPKEY_MAP_ENTRY(UI_PKEY_Minimized);                    
	PROPKEY_MAP_ENTRY(UI_PKEY_QuickAccessToolbarDock);       
	PROPKEY_MAP_ENTRY(UI_PKEY_ContextAvailable);             
	PROPKEY_MAP_ENTRY(UI_PKEY_GlobalBackgroundColor);        
	PROPKEY_MAP_ENTRY(UI_PKEY_GlobalHighlightColor);         
	PROPKEY_MAP_ENTRY(UI_PKEY_GlobalTextColor);              
}



CPropertyKeyItem::CPropertyKeyItem(void)
{
}

CPropertyKeyItem::~CPropertyKeyItem(void)
{
}


STDMETHODIMP CPropertyKeyItem::GetValue(__in REFPROPERTYKEY key, __out PROPVARIANT *ppropvar)
{
	if (key == UI_PKEY_Label)
    {
		return UIInitPropertyFromString(UI_PKEY_Label, m_propertyKeyName.c_str(), ppropvar);
    }
	//else
    return S_FALSE;
}


STDMETHODIMP CPropertyKeyItem::Initialize(REFPROPERTYKEY propertyKey, PCWSTR propertyKeyName)
{
	m_propertyKey = propertyKey;
	m_propertyKeyName = propertyKeyName;
	return S_OK;
}

STDMETHODIMP CPropertyKeyItem::GetPropertyKey(PROPERTYKEY *propertyKey)
{
	InitPropertyKeyMap();

	*propertyKey = m_propertyKey;
	return S_OK;
}
